package com.yindong.tabbar.bottom;

import com.yindong.tabbar.ResourceTable;
import com.yindong.tabbar.model.TabBarInfoModel;
import ohos.agp.components.*;
import ohos.agp.utils.Color;
import ohos.app.Context;

/**
 * 自定义底部导航内容组件，封装组件功能
 *      采用DependentLayout风格布局，设置上下布局
 *
 *
 * @author      殷冬
 * @date        2021-01-18
 * @version     1.0.0
 */
public class BottomNavigationContentBar extends DependentLayout implements NavigationListener.OnBarSelectedListener<TabBarInfoModel>{

    private Image image;

    private Text text;

    public BottomNavigationContentBar(Context context) {
        super(context);
    }

    public BottomNavigationContentBar(Context context, AttrSet attrSet) {
        super(context, attrSet);
    }

    public BottomNavigationContentBar(Context context, AttrSet attrSet, String styleName) {
        super(context, attrSet, styleName);
        // 获取导航内容组件对象
        Component component = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_bottom_navigation_content_bar, this, true);
        // 获取bottom_navigation_content_bar.xml的image对象, id名保证全局唯一
        this.image = (Image) component.findComponentById(ResourceTable.Id_bottom_navigation_content_bar_image);
        // 获取bottom_navigation_content_bar.xml的text对象， id名保证全局唯一
        this.text = (Text) component.findComponentById(ResourceTable.Id_bottom_navigation_content_bar_name);
        // 设置图像缩放模式为INSIDE： 根据比例将图像缩放为与图像项目相同或较小的图像，并在中心显示图像内容。
        this.image.setScaleMode(Image.ScaleMode.INSIDE);
    }

    /**
     * 初始化导航内容组件
     *
     * @param tabBarInfoModel       tabbar配置信息
     * @param isSelected            是否选中
     * @return
     */
    public void initialization(TabBarInfoModel tabBarInfoModel, boolean isSelected){
        // 设置图片可见
        this.image.setVisibility(VISIBLE);
        // 根据配置，设置文字是否显示
        if(tabBarInfoModel.getTextIsDisplay()){
            this.text.setVisibility(VISIBLE);
        }else{
            this.text.setVisibility(HIDE);
        }
        // 设置tabbar名字
        this.text.setText(tabBarInfoModel.getText());
        // 设置tabbar图片和名字颜色
        if(isSelected){
            // 设置选中的样式
            this.image.setPixelMap(tabBarInfoModel.getSelectedIconId());
            this.text.setTextColor(new Color(Color.getIntColor(tabBarInfoModel.getSelectedTextColor())));
        }else{
            // 设置未选中的样式
            this.image.setPixelMap(tabBarInfoModel.getUnSelectedIconId());
            this.text.setTextColor(new Color(Color.getIntColor(tabBarInfoModel.getUnSelectedTextColor())));
        }
    }

    /**
     * 将点击的tabbar修改为选中状态
     *
     * @param nextTabBarInfoModel       点击的tabbar信息
     */

    @Override
    public void onBarSelectedChange(Integer index, TabBarInfoModel nextTabBarInfoModel, TabBarInfoModel currentTabBarInfoModel){
        // 设置点击的tabbar选中
        this.initialization(nextTabBarInfoModel, true);
    }

    /**
     * 将之前选中的tabbar修改为未选中状态
     *
     * @param currentTabBarInfoModel    之前的tabbar信息
     */
    public void onBarUnSelectedChange(TabBarInfoModel currentTabBarInfoModel){
        // 取消之前的tabbar选中状态
        this.initialization(currentTabBarInfoModel, false);
    }

}
